package tenant

import (
	"sync"

	"gorm.io/gorm"
)

// DataSourceManager 多租户数据源管理器
type DataSourceManager struct {
	sync.RWMutex
	defaultDB  *gorm.DB
	tenantDBs  map[string]*gorm.DB
	tenantMode TenantMode
}

// NewDataSourceManager 创建数据源管理器实例
func NewDataSourceManager(defaultDB *gorm.DB, mode TenantMode) *DataSourceManager {
	return &DataSourceManager{
		defaultDB:  defaultDB,
		tenantDBs:  make(map[string]*gorm.DB),
		tenantMode: mode,
	}
}

// GetConnection 获取租户数据库连接
func (m *DataSourceManager) GetConnection(tenantID string) (*gorm.DB, error) {
	// 共享数据库模式，直接返回默认连接
	if m.tenantMode == SharedDatabase {
		return m.defaultDB.Set("tenant_id", tenantID), nil
	}

	// 检查是否已有连接
	m.RLock()
	if db, ok := m.tenantDBs[tenantID]; ok {
		m.RUnlock()
		return db, nil
	}
	m.RUnlock()

	// 创建新连接
	m.Lock()
	defer m.Unlock()

	// 再次检查，避免并发创建
	if db, ok := m.tenantDBs[tenantID]; ok {
		return db, nil
	}

	// TODO: 根据租户信息创建新的数据库连接
	// TODO: 根据租户模式设置不同的连接参数
	// TODO: 将新连接存入缓存

	return nil, nil
}

// CloseConnection 关闭租户数据库连接
func (m *DataSourceManager) CloseConnection(tenantID string) error {
	m.Lock()
	defer m.Unlock()

	if db, ok := m.tenantDBs[tenantID]; ok {
		// TODO: 关闭数据库连接
		delete(m.tenantDBs, tenantID)
		_ = db
	}

	return nil
}

// TODO: 实现租户数据库自动创建
// TODO: 实现租户数据库连接池管理
// TODO: 实现租户数据库健康检查
// TODO: 实现租户数据库迁移
